# 创建对象后，python解释器默认调用__init__()方法；
# 当删除一个对象时，python解释器也会默认调用一个方法，这个方法为__del__()方法

import time
import sys
class Animal(object):

    # 初始化方法
    # 创建完对象后会自动被调用
    def __init__(self, name):
        print('__init__方法被调用')
        self.__name = name


    # 析构方法
    # 当对象被删除时，会自动被调用
    def __del__(self):
        print("__del__方法被调用")
        print("%s对象马上被干掉了..."%self.__name)

# 创建对象
dog = Animal("哈皮狗")

# 删除对象
del dog


cat = Animal("波斯猫")
cat2 = cat
cat3 = cat

print("---马上 删除cat对象")
print(sys.getrefcount(cat))
del cat
print(sys.getrefcount(cat2))
print("---马上 删除cat2对象")
del cat2
print(sys.getrefcount(cat3))
print("---马上 删除cat3对象")
del cat3
print("程序2秒钟后结束")
time.sleep(2)

# 当有1个变量保存了对象的引用时，此对象的引用计数就会加1
# 当使用del删除变量指向的对象时，如果对象的引用计数为1，比如3，
# 那么此时只会让这个引用计数减1，即变为2，当再次调用del时，变为1，
# 如果再调用1次del，此时会真的把对象进行删除

# 可以使用 import sys  sys.getrefcount(obj) 来获取一个变量的引用数